Cognito によって発行された ID トークンが無効化後も利用できるのはなぜですか?
困っていること
API Gateway の認証処理として Cognito ユーザープールより発行された ID トークンを用いた JWT オーソライザーを使用しています。
AdminUserGlobalSignOut API を用いてトークンを無効化後も一定時間発行された ID トークンが有効な状態となっています。
即時無効化する方法はありますか。
どう対応すればいいの?
すでに発行された ID トークンを無効化する機能は Cognito の機能として提供されておりません。
Cognito によって提供される ID トークンは JSON Web Token(JWT) となります。
ID トークンとは、name、email、および phone_number など、認証されたユーザーのアイデンティティに関するクレームが含まれる、 JSON ウェブトークン (JWT) です。
JSON Web Token(JWT) とは、サーバーへの問い合わせを必要とせず、クライアント側で正当性を確保することのできる認証の仕組みとなっております。
JSON Web Token(JWT) には独自の有効期限が設定されており、それによりトークンが有効かが決定いたします。 上記性質上、サーバーサイド側で既にトークンが無効化されていた場合も、API Gateway の JWT オーソライザーのような JSON Web Token(JWT) を用いた認証はトークン側に設定された有効期限が切れるまでは有効となります。
JWT トークンは、トークンが作成されたときに割り当てられた署名と有効期限を持つ自己完結型トークンです。 取り消されたトークンは、トークンを必要とする Amazon Cognito API コールでは使用できません。 ただし、JWT ライブラリを使用してトークンの署名と有効期限が検証された場合は、引き続き使用が可能です。
代替案
Lambda オーソライザーを用いて認証処理を実装いただく方法をご検討ください。
具体的な構成と致しましては、ID トークンの無効化状態を DynamoDB 等の外部データベースに保存し、Lambda オーソライザーでの ID トークンの検証時に ID トークンの無効化状況も合わせて確認するようなものが考えられます。
ID トークンを検証する方法につきましては、以下のドキュメントをご参照ください。